home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Tools - Objects / MacApp / MacApp 3.0a2 / CPlusIncludes / RTLib.h < prev    next >
Text File  |  1991-05-01  |  3KB  |  135 lines

  1. /*----------------------------------------------------------------------*/
  2. /*        RTLib.h                                                             */
  3. /*        Created by Sandy McEntee,  Wednesday, April 2, 1990.            */
  4. /*        Copyright © 1990 Apple Computer, Inc.                            */
  5. /*        All Rights Reserved.                                            */
  6. /*----------------------------------------------------------------------*/
  7.  
  8. #ifndef __RTLib__
  9. #define __RTLib__
  10.  
  11. #ifndef __TYPES__
  12. #include <Types.h>
  13. #endif
  14.  
  15. #ifdef __safe_link
  16. extern "C" {
  17. #endif
  18.  
  19. //
  20. //        Error Codes
  21. //
  22.  
  23. enum { eRTNoErr=0, eRTBadVersion=2, eRTInvalidOp=4, eRTInvalidJTPtr=6 };
  24.  
  25.  
  26. //
  27. //        Action Codes
  28. //
  29.  
  30. enum { kRTSysErr=0, kRTRetry=1, kRTContinue=2 };
  31.  
  32.  
  33. //
  34. //        Runtime Operations
  35. //
  36. enum    {    kRTGetVersion=10,        kRTGetVersionA5=11,
  37.              kRTGetJTAddress=12,    kRTGetJTAddressA5=13,
  38.              kRTSetPreLoad=14,        kRTSetPreLoadA5=15,
  39.              kRTSetSegLoadErr=16,    kRTSetSegLoadErrA5=17,
  40.              kRTSetPostLoad=18,    kRTSetPostLoadA5=19,
  41.              kRTSetPreUnload=20,    kRTSetPreUnloadA5=21,
  42.              kRTPreLaunch=22,        kRTPostLaunch=23
  43.         };
  44.  
  45.  
  46. //
  47. //        Version and Jump Table Entry Address Parameters
  48. //
  49.  
  50. struct RTGetVersionParam {
  51.     unsigned short    fVersion;
  52. };
  53. typedef struct RTGetVersionParam RTGetVersionParam;
  54.  
  55.  
  56. struct RTGetJTAddrParam {
  57.     void*    fJTAddr;
  58.     void*    fCodeAddr;
  59. };
  60. typedef struct RTGetJTAddrParam RTGetJTAddrParam;
  61.  
  62.  
  63. //
  64. //        RTState Definition
  65. //
  66.  
  67. struct RTState {
  68.     unsigned short    fVersion;                    // run-time version
  69.     void*                fSP;                    // SP: &-of user return address
  70.     void*                fJTAddr;                // PC: &-of called jump table entry
  71.     long                fRegisters[15];            // registers D0-D7 and A0-A6 when
  72.                                                 //    _LoadSeg was called
  73.     short                fSegNo;                    //    segment number
  74.     ResType                fSegType;                //    segment type (normally 'CODE')
  75.     long                fSegSize;                //    segment size
  76.     Boolean                fSegInCore;                //    true if segment is in memory
  77.     Boolean                fReserved1;                // (reserved for future use)
  78.     OSErr                fOSErr;                    //    error number
  79.     long                fReserved2;                // (reserved for future use)
  80. };
  81. typedef struct RTState RTState;
  82.  
  83.  
  84. //
  85. //        Version Definitions
  86. //
  87.  
  88. #define    kVersion32bit            0xFFFF            
  89. #define    kVersion16bit            0x0000                    
  90.  
  91.  
  92. //
  93. //        User Handler Definition
  94. //
  95.  
  96. typedef pascal short (*SegLoadHdlrPtr) (RTState* state);
  97.  
  98.  
  99. //
  100. //        Segment Loader Hook Parameters
  101. //
  102.  
  103. struct RTSetSegLoadParam {
  104.     SegLoadHdlrPtr    fUserHdlr;
  105.     SegLoadHdlrPtr    fOldUserHdlr;
  106. };
  107. typedef struct RTSetSegLoadParam RTSetSegLoadParam;
  108.  
  109.  
  110. //
  111. //        Runtime Parameter Block
  112. //
  113.  
  114. struct RTPB {
  115.     short    fOperation;
  116.     void*    fA5;
  117.     union    {
  118.         RTGetVersionParam    fVersionParam;
  119.         RTGetJTAddrParam    fJTAddrParam;
  120.         RTSetSegLoadParam    fSegLoadParam;
  121.     } fRTParam;
  122. };
  123.  
  124. typedef struct RTPB RTPB;
  125.  
  126. pascal OSErr Runtime (RTPB* runtime_parms);
  127.  
  128.  
  129. #ifdef __safe_link
  130. }
  131. #endif
  132.  
  133. #endif    /* __RTLib__ */
  134.  
  135.